
package com.ipartek.formacion.gestformwww.controlador;

import com.ipartek.formacion.gestformwww.modelo.ModeloCandidato;
import com.ipartek.formacion.gestformwww.modelo.beans.excepciones.GestorFormacionExcepcion;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.util.ArrayList;

/**
 * Clase encargada de eliminar un candidato de la base de datos
 * @author Ekaitz y Eneko
 */
public class BorrarNuevoCandidatoAccion implements Accion {

/**
 * Descripción: ejecuta la acción de borrado del Candidato
 * @param servlet HTTPServlet
 * @param request HttpServletRequest
 * @param response HttpServletResponse
 * @return devuelve el router que dirige a la página que corresponda (a Inicio o a Principal)
 */
    public AccionRouter ejecuta(HttpServlet servlet, HttpServletRequest request, HttpServletResponse response) {
        HttpSession sesion = request.getSession();
        AccionServlet as = (AccionServlet) servlet;
        AccionRouter router = null;
        ArrayList<String> mensajes= new ArrayList<String>();
        Boolean correcto = false;
        int idCandidato = 0;

         boolean ejecutar = true;
         String aleatorio = (String) sesion.getAttribute("aleatorioBorrarCandidato");

        if (aleatorio != null) {
            if (request.getParameter("aleatorioBorrarCandidato") != null) {
                if (request.getParameter("aleatorioBorrarCandidato").equals(aleatorio)) {
                    // Si se pulsa F5 o atras el aleatorio del request será igual al de la sesión.
                    // NO debe crearse un Candidato (ya se creo anteriormente)
                    ejecutar = false;
                } else {
                    sesion.setAttribute("aleatorioBorrarCandidato", request.getParameter("aleatorioBorrarCandidato"));
                }
            }
        } else {
            sesion.setAttribute("aleatorioBorrarCandidato", request.getParameter("aleatorioBorrarCandidato"));
        }

        if (sesion.getAttribute("usuario")!= null ) {

            ModeloCandidato modelo = (ModeloCandidato) servlet.getServletContext().getAttribute("ModeloCandidato");

            //  Se elimina un unico candidato si esta en una lista de convocatorias
            if (request.getParameter("listaIdCandidato") == null){
                try{
                    String[] ids;
                    ids = request.getParameterValues("canId");
                    if (ids != null) {
                        for (String s : ids){
                            idCandidato = Integer.parseInt(s);
                            if (idCandidato != -1 && ejecutar){
                                try{
                                    modelo.eliminarNuevoCandidato(idCandidato);
                                    correcto = true;
                                } catch (GestorFormacionExcepcion ex) {
                                    Logger.getLogger(BorrarCandidatoAccion.class.getName()).log(Level.SEVERE, null, ex);
                                    sesion.setAttribute("excepciones", ex.getMessage());
                                }
                            }
                        }
                    }

                }catch (NumberFormatException ex) {
                     idCandidato = -1;}
            }else{
                //Se elimina una lista de convocatorias si esta vacia
                  ArrayList ids = new ArrayList();
                try{
                    for(String idStr:((String[])request.getParameterValues("listaIdCandidato"))){
                        ids.add(Integer.parseInt(idStr));
                    }
                }catch(NumberFormatException ex){
                    ids = null;
                }
                if (ids != null && ejecutar){
                    try {
                        modelo.eliminarNuevoCandidato(ids);
                        correcto = true;
                    } catch (GestorFormacionExcepcion ex) {
                        Logger.getLogger(BorrarCandidatoAccion.class.getName()).log(Level.SEVERE, null, ex);
                        sesion.setAttribute("excepciones", ex.getMessage());
                    }
                }
            }
            if (correcto){
                mensajes.add("mensaje-borrar-candidato");
                sesion.setAttribute("mensajes",mensajes);
            }
            try {
                router = as.getFactory().getAction(as.getNombreClaseRecurso("ver-modificar-candidato-accion"),servlet.getClass().getClassLoader()).ejecuta(servlet, request, response);
            } catch (ClassNotFoundException ex) {
                Logger.getLogger(BorrarCandidatoAccion.class.getName()).log(Level.SEVERE, null, ex);
            } catch (InstantiationException ex) {
                Logger.getLogger(BorrarCandidatoAccion.class.getName()).log(Level.SEVERE, null, ex);
            } catch (IllegalAccessException ex) {
                Logger.getLogger(BorrarCandidatoAccion.class.getName()).log(Level.SEVERE, null, ex);
            }

        }else{
            router = new AccionRouter("inicio");
        }
        return router;
    }
}